#include <iostream>
#include <stack>
#include <vector>

using namespace std;

int main()
{
    deque<int> deq = {1, 2, 3, 4, 5};
    stack<int> stk(deq); // 从 deq 拷贝元素到 stk

    vector<string> svec = {"a", "b", "c"};
    // 在 vector 上实现的空栈
    stack<string, vector<string>> str_stk;
    // str_stk2 在 vector 上实现，初始化时保存 svec 的拷贝
    stack<string, vector<string>> str_stk2(svec);

    /**
     * 构造 stack 的容器类型：除 array、forward_list 之外
     * 构造 queue 的容器类型：list、deque
     * 构造 priority_queue 的容器类型：vector、deque
     */

    stack<int> intStack; // 空栈
    // 填满栈
    for (size_t ix = 0; ix != 10; ++ix)
        intStack.push(ix);       // intStack 保存 0 到 9 十个数
    while (!intStack.empty()) {  // intStack 中有值就继续循环
        int value = intStack.top();
        cout << value << " ";
        // 使用栈顶值的代码
        intStack.pop(); // 弹出栈顶元素，继续循环
    }
    cout << endl;
}